/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.webhomesites.locacao.presenter;

import br.com.webhomesites.locacao.model.EmitirContratoDAO;
import br.com.webhomesites.locacao.model.EmitirContratoModel;
import br.com.webhomesites.locacao.model.LocacaoDAO;
import br.com.webhomesites.locacao.model.LocacaoModel;
import br.com.webhomesites.locacao.view.EmitirContratoView;
import br.com.webhomesites.locacao.view.LocacaoView;
import br.com.webhomesites.padrao.utils.Strategy;
import br.com.webhomesites.principal.EmissaoRelatorios;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author Webhome
 */
public class EmitirContratoPresenter {
    
    private EmitirContratoModel model;
    private EmitirContratoView view;
    private LocacaoModel locacaoModel;
    private LocacaoDAO locacaoDAO;
    private EmitirContratoDAO emitirContratoDAO = new EmitirContratoDAO();
    private LocacaoPresenter locacaoPresenter;
    public final Strategy MODELO1_STRATEGY = new Modelo1Strategy();
    public final Strategy MODELO2_STRATEGY = new Modelo2Strategy();
    public final Strategy MODELO3_STRATEGY = new Modelo3Strategy();
    public final Strategy MODELO4_STRATEGY = new Modelo4Strategy();
    public final Strategy INSERIR_CONTRATO = new InserirContrato();
    public final Strategy ATUALIZAR_CONTRATO = new AtualizarContrato();
    private Strategy operacao = INSERIR_CONTRATO;
    private Strategy modelo = MODELO1_STRATEGY;
    DecimalFormat df = new DecimalFormat("###,###,##0.00");
    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
    boolean mostrarView = false;
    
    public EmitirContratoPresenter(EmitirContratoModel model, EmitirContratoView view, LocacaoModel locacaoModel, LocacaoDAO locacaoDAO, LocacaoPresenter locacaoPresenter) {
        this.model = model;
        this.view = view;
        this.locacaoModel = locacaoModel;
        this.locacaoDAO = locacaoDAO;
        this.locacaoPresenter = locacaoPresenter;
    }
    
    public void setUpViewListeners() {
        view.setModelo1ActionListener(new EmitirContratoPresenterActionListener.Modelo1ActionListener(this));
        view.setModelo2ActionListener(new EmitirContratoPresenterActionListener.Modelo2ActionListener(this));
        view.setModelo3ActionListener(new EmitirContratoPresenterActionListener.Modelo3ActionListener(this));
        view.setModelo4ActionListener(new EmitirContratoPresenterActionListener.Modelo4ActionListener(this));
        view.setCancelarActionListener(new EmitirContratoPresenterActionListener.CancelarActionListener(this));
    }
    
    public void updateModelFromView() {
        
        model.setId(locacaoPresenter.getLocacaoView().getCodigoLocacao());
        model.setDataSaida(new Date());
        model.setHoraSaida(new Date());
        model.setLocatario(view.getLocatario());
        model.setLocacaoModel(locacaoModel);
        
        if (operacao == INSERIR_CONTRATO) {
            try {
            emitirContratoDAO.save(model);
            } catch (Exception e) {
                System.out.println("Contrato já impresso uma vez");
            }
        } else {
            emitirContratoDAO.update(model);
        }
    }
    
    public void habilitarEdicao(boolean arg) {
//        view.enableBtnCancelar(arg);
//        view.enableBtnConfirmar(arg);
//        view.enableBtnRecibo(arg);
    }
    
    public void novoEmiritContrato() {
        updateModelFromView();
    }
    
    public void updateModelLocacaoFromDTSPV() {
//        locacaoPresenter.getLocacaoModel().set
//            
//        locacaoDAO.update(locacaoModel);
    }
    
    public EmitirContratoView getView() {
        return view;
    }
    
    public EmitirContratoModel getModel() {
        return model;
    }
    
    public void setView(EmitirContratoView view) {
        this.view = view;
    }
    
    public void setModel(EmitirContratoModel model) {
        this.model = model;
    }
    
    public void createView() {
        //this.();            
        this.setUpViewListeners();
        this.habilitarEdicao(true);

        //if (mostrarView) {
        view.packAndShow();
        //}
    }
    
    public void setOperacao(Strategy operacao) {
        this.operacao = operacao;
    }
    
    public Strategy getOperacao() {
        return operacao;
    }
    
    public Strategy getModelo() {
        return modelo;
    }
    
    public void setModelo(Strategy modelo) {
        this.modelo = modelo;
    }    
    
    private class InserirContrato implements Strategy {
        
        public void execute() {
            
        }
    }
    
    private class AtualizarContrato implements Strategy {
        
        public void execute() {
            
        }
    }
    
    private class Modelo1Strategy implements Strategy {
        
        public void execute() {
            try {
                Long n = locacaoPresenter.getLocacaoModel().getId();
                Integer n1 = Integer.valueOf(n.toString());
                EmissaoRelatorios emissaoRelatorios = new EmissaoRelatorios();
                
                emissaoRelatorios.imprimirContrato(n1, 1);
                
            } catch (Exception e) {
                System.out.println("Capacidade do Integer estourou.");
            }
        }
    }
    
    private class Modelo2Strategy implements Strategy {
        
        public void execute() {
            try {
                Long n = locacaoPresenter.getLocacaoModel().getId();
                Integer n1 = Integer.valueOf(n.toString());
                EmissaoRelatorios emissaoRelatorios = new EmissaoRelatorios();
                
                emissaoRelatorios.imprimirContrato(n1, 2);
                
            } catch (Exception e) {
                System.out.println("Capacidade do Integer estourou.");
            }
        }
    }
    
    private class Modelo3Strategy implements Strategy {
        
        public void execute() {
            try {
                Long n = locacaoPresenter.getLocacaoModel().getId();
                Integer n1 = Integer.valueOf(n.toString());
                EmissaoRelatorios emissaoRelatorios = new EmissaoRelatorios();
                
                emissaoRelatorios.imprimirContrato(n1, 3);
                
            } catch (Exception e) {
                System.out.println("Capacidade do Integer estourou.");
            }
        }
    }
    
    private class Modelo4Strategy implements Strategy {
        
        public void execute() {
            try {
                Long n = locacaoPresenter.getLocacaoModel().getId();
                Integer n1 = Integer.valueOf(n.toString());
                EmissaoRelatorios emissaoRelatorios = new EmissaoRelatorios();
                
                emissaoRelatorios.imprimirContrato(n1, 4);
                
            } catch (Exception e) {
                System.out.println("Capacidade do Integer estourou.");
            }
        }
    }
}
